/**
 * 这里存放的是对token的操作
 */
import aesKeyStore from "store2";
import { randomBytes } from "crypto";
import { isUndefined } from "lodash";
import { decodeDataByAesKey } from "@/utils/algorithm";

const aeskey = "aeskey_custom";

/**
 * 是否有 AesKey
 */
export const hasAesKey = (): boolean => aesKeyStore.has(aeskey);
/**
 * 设置 AesKey
 */
export const setAesKey = (data: string): void =>
  aesKeyStore.set(aeskey, data, true);
/**
 * 获取 AesKey
 */
const getAesKeyFromStore = (): string => aesKeyStore.get(aeskey);
/**
 * 这是存储在程序中的AES密钥。
 * 我觉得不用换了，每次使用公钥加密出来的结果都是不一样的。
 */
let _16Key: string;
/**
 * 随机生成16位的密钥
 * 存储这个密钥到store中，如果不存储，刷新页面就会重新生成一个key
 * @param {*} flag 如果是true，那么表示需要更新这个16位密钥。
 */
const get16Key = (flag: any = false): string => {
  const count = 4;
  if (flag) return (_16Key = randomBytes(count).toString());
  return (_16Key = isUndefined(_16Key)
    ? randomBytes(count).toString()
    : _16Key);
};

let _aesKey: string;
/**
 * 生成/更新 aes密钥
 */
export const getAesKey = (flag = false): string => get16Key(flag);
